package org.hyl.javabase.接口;
//多态
public class demo2 {
	public static void main(String[] arg){	 
		   demo2 p=new demo2();
		   p.fun6();
	}
	public void fun1(){		
		car a=new car();
		a.left();
		suv b=new suv();
		b.left();
		b.left(0.04f);
	}
	public void fun2(){		
		car a=new car();
		a.left();
		
		car b=new suv(); 
		//说明了一个问题，对象变量的属性值由实例化对象决定，不由声明类型决定
		//但是 car也起到限定 b变量特征的做用，b变量此时只能用car类有的方法和属性		
		
		b.left();
		//b.left(0.04f);
		//因为suv是从car继承过来的，所以car有的公开和保有的属性和方法
		//suv都有，但是suv有的car就没有,所以b.left(0.04f);这句是错误的
		//suv c=new car();//子类实例化后可以赋给父类，反之则不行
		
	}
	public void fun3(){
		ITRound ir1= new car(); 
		ir1.left();
		
		ITRound ir2= new suv(); 
	}
	public void fun4(){
		man m=new man(); 
		m.咀嚼();
		m.流过食道();
		m.分泌胃酸();
		
		
		dog g=new dog(); 
		g.咀嚼();
		g.流过食道();
		g.分泌胃酸();
		//
		fun5_1(new dog());
		fun5_2(new man());
	
		fun5(new man());
		dog a=new dog();
		fun5((吃)a);//强制转换   ：此处有陷阱，使用需谨慎！！！
		
	}
	public void fun5(吃 c){	
		c.咀嚼();
		吞咽 t=(吞咽)c;
		t.流过食道();
		消化 x=(消化)c;
		x.分泌胃酸();
	}
	public void fun5_1(dog g){	
	
		g.咀嚼();
		g.流过食道();
		g.分泌胃酸();
	}
	public void fun5_2(man g){	
		
		g.咀嚼();
		g.流过食道();
		g.分泌胃酸();
	}
	public void fun6(){
		fun5(new cat());
	}
}
